package com.example.projectmanagement.util;

import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;

/**
 * 文件安全工具类
 */
public class FileSecurityUtil {
    
    private static final String UPLOAD_DIR = "uploads/avatars/";
    
    /**
     * 验证头像路径安全性
     * @param avatarPath 头像路径
     * @return 是否安全
     */
    public static boolean isValidAvatarPath(String avatarPath) {
        // 检查路径是否为空
        if (avatarPath == null || avatarPath.isEmpty()) {
            return true; // 允许空路径（删除头像）
        }
        
        // 检查路径是否包含危险字符
        if (avatarPath.contains("..") || avatarPath.contains("./") || avatarPath.contains(".\\")) {
            return false;
        }
        
        // 检查路径是否以允许的目录开头 (支持课程封面和用户头像)
        if (!avatarPath.startsWith(UPLOAD_DIR) && !avatarPath.startsWith("uploads/") && !avatarPath.startsWith("uploads/courseCover/")) {
            return false;
        }
        
        // 检查文件扩展名
        String lowerPath = avatarPath.toLowerCase();
        if (!lowerPath.endsWith(".jpg") && !lowerPath.endsWith(".jpeg") && !lowerPath.endsWith(".png")) {
            return false;
        }
        
        return true;
    }
    
    /**
     * 验证文件路径是否在允许的目录内
     * @param filePath 文件路径
     * @return 是否安全
     */
    public static boolean isPathInUploadDir(String filePath) {
        if (filePath == null || filePath.isEmpty()) {
            return false;
        }
        
        try {
            Path path = Paths.get(filePath);
            Path normalizedPath = path.normalize();
            Path uploadDirPath = Paths.get(UPLOAD_DIR).toAbsolutePath().normalize();
            
            // 确保文件路径在上传目录内
            return normalizedPath.startsWith(uploadDirPath);
        } catch (Exception e) {
            return false;
        }
    }
    
    /**
     * 验证文件是否为允许的图片类型
     * @param filePath 文件路径
     * @return 是否为允许的图片类型
     */
    public static boolean isAllowedImageType(String filePath) {
        if (filePath == null || filePath.isEmpty()) {
            return false;
        }
        
        String lowerPath = filePath.toLowerCase();
        return lowerPath.endsWith(".jpg") || lowerPath.endsWith(".jpeg") || lowerPath.endsWith(".png");
    }
}